In the field of data communications, it is known to generate error check data based upon a bit pattern to be communicated from a source point to a destination point in a communications network. As an example, a header of an Asynchronous Transfer Mode (ATM) cell to be transmitted from the source point to the destination point comprises 40 bits of data. Bits 0 to 7 of the header comprise so-called Header Error Check (HEC) data based upon bits 8 to 39 of the header, bits 8 to 39 comprising actual header data to be communicated. The HEC data is a Cyclic Redundancy Check 8 (CRC8) value calculated from the actual data (bits 8 to 39).
Upon receipt of the header, the CRC8 value of the data portion of the header (bits 8 to 39) is re-calculated and used. In the case of ATM, the calculated CRC8 value is XORed with the HEC data received to calculate parity check data, sometimes known as a syndrome value. For each bit position of the received data (bits 0 to 39), a unique syndrome value exists and is typically stored in a look-up table indexed by bit position. Hence, the unique syndrome value indicates the location of a one-bit error.
Consequently, after calculation of the syndrome value, the syndrome value is used to search the look-up table for a corresponding location (bit position) of a bit that is in error. The location of the error is then used to correct the 1-bit error that the received data contains.
However, the table is unsorted and so access of error location data is inefficient, as a linear search method is usually involved. Therefore, for reasons of access speed, the table is sorted by syndrome value and “padded” with unspecified error locations for non-existent syndrome values, for example −1. The padded look-up table is indexed by syndrome value, the error location data constituting table entries. Further, the padded look-up table is known as a “reverse table”.
In order to provide the above error correction, a so-called micro-engine module is provided, supported by a microprocessor. However, the micro-engine has limited storage capacity and the padded reverse look-up table is an inefficient use of storage space. For example, a typical reverse look-up table for providing CRC8 error correction only has 40 out of 256 “specified” entries, i.e. only 15.6% of the entries are specified, the remaining entries using valuable storage capacity of the micro-engine. Consequently, use of the micro-engine module may not be possible where constraints on memory space exist.